home *** CD-ROM | disk | FTP | other *** search
- '''
- Care about images with help of the amazing (perl) library Exiftool.
- '''
-
- import subprocess
- import parser
-
-
- class ExiftoolStripper(parser.GenericParser):
- '''
- A generic stripper class using exiftool as backend
- '''
-
- def __init__(self, filename, parser, mime, backup, add2archive):
- super(ExiftoolStripper, self).__init__(filename, parser, mime,
- backup, add2archive)
- self.allowed = ['ExifTool Version Number', 'File Name', 'Directory',
- 'File Size', 'File Modification Date/Time', 'File Permissions',
- 'File Type', 'MIME Type', 'Image Width', 'Image Height',
- 'Image Size']
- self._set_allowed()
-
- def _set_allowed(self):
- '''
- Set the allowed/harmless list of metadata
- '''
- raise NotImplementedError
-
- def remove_all(self):
- '''
- Remove all metadata with help of exiftool
- '''
- try:
- if self.backup:
- # Note: '-All=' must be followed by a known exiftool option.
- process = subprocess.Popen(['exiftool', '-m', '-All=',
- '-out', self.output, self.filename],
- stdout=open('/dev/null'))
- process.wait()
- else:
- # Note: '-All=' must be followed by a known exiftool option.
- process = subprocess.Popen(
- [ 'exiftool', '-m', '-All=', '-overwrite_original', self.filename ],
- stdout=open('/dev/null'))
- process.wait()
- return True
- except:
- return False
-
- def is_clean(self):
- '''
- Check if the file is clean with help of exiftool
- '''
- out = subprocess.Popen(['exiftool', self.filename],
- stdout=subprocess.PIPE).communicate()[0]
- out = out.split('\n')
- for i in out[:-1]:
- if i.split(':')[0].strip() not in self.allowed:
- return False
- return True
-
- def get_meta(self):
- '''
- Return every harmful meta with help of exiftool
- '''
- out = subprocess.Popen(['exiftool', self.filename],
- stdout=subprocess.PIPE).communicate()[0]
- out = out.split('\n')
- meta = {}
- for i in out[:-1]:
- key = i.split(':')[0].strip()
- if key not in self.allowed:
- meta[key] = i.split(':')[1].strip()
- return meta
-
-
- class JpegStripper(ExiftoolStripper):
- '''
- Care about jpeg files with help
- of exiftool
- '''
- def _set_allowed(self):
- self.allowed.extend(['JFIF Version', 'Resolution Unit',
- 'X Resolution', 'Y Resolution', 'Encoding Process', 'Bits Per Sample',
- 'Color Components', 'Y Cb Cr Sub Sampling'])
-
- class PngStripper(ExiftoolStripper):
- '''
- Care about png files with help
- of exiftool
- '''
- def _set_allowed(self):
- self.allowed.extend(['Bit Depth', 'Color Type', 'Compression',
- 'Filter', 'Interlace', 'Pixels Per Unit X', 'Pixels Per Unit Y',
- 'Pixel Units'])
-